package com.springdoor.goods.mapper;

import java.util.List;
import java.util.Map;

import com.springdoor.common.core.domain.entity.SprdGoodsAttr;
import org.apache.ibatis.annotations.Param;

/**
 * 商品属性Mapper接口
 *
 * @author llshs
 * @date 2024-05-08
 */
public interface SprdGoodsAttrMapper
{
    /**
     * 查询商品属性
     *
     * @param attrId 商品属性主键
     * @return 商品属性
     */
    public SprdGoodsAttr selectSprdGoodsAttrByAttrId(Long attrId);

    /**
     * 查询商品属性列表
     *
     * @param sprdGoodsAttr 商品属性
     * @return 商品属性集合
     */
    public List<SprdGoodsAttr> selectSprdGoodsAttrList(SprdGoodsAttr sprdGoodsAttr);

    /**
     * 新增商品属性
     *
     * @param sprdGoodsAttr 商品属性
     * @return 结果
     */
    public int insertSprdGoodsAttr(SprdGoodsAttr sprdGoodsAttr);

    /**
     * 修改商品属性
     *
     * @param sprdGoodsAttr 商品属性
     * @return 结果
     */
    public int updateSprdGoodsAttr(SprdGoodsAttr sprdGoodsAttr);

    /**
     * 删除商品属性
     *
     * @param attrId 商品属性主键
     * @return 结果
     */
    public int deleteSprdGoodsAttrByAttrId(Long attrId);

    /**
     * 批量删除商品属性
     *
     * @param attrIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSprdGoodsAttrByAttrIds(Long[] attrIds);

    /**
     * 校验商品属性是否唯一
     *
     * @param goodsAttr 商品属性
     * @return 结果
     */
    public SprdGoodsAttr checkGoodsAttrCodeUnique(SprdGoodsAttr goodsAttr);
    public SprdGoodsAttr checkGoodsAttrNameUnique(SprdGoodsAttr goodsAttr);

    /**
     * 查询所有商品属性
     *
     * @return 结果
     */
    public List<SprdGoodsAttr> selectGoodsAttrAll();

    /**
     * 查询商品属性菜单
     *
     * @return 结果
     */
    public List<SprdGoodsAttr> selectGoodsAttrMenu();

    /**
     * 查询所有有效商品属性
     *
     * @return
     */
    public List<SprdGoodsAttr> selectValidGoodsAttrAll();

    /**
     * 根据 类型id 查询属性集合
     *
     * @param typeId
     * @return
     */
    public List<Long> selectAttrListByTypeId(@Param("typeId") Long typeId);


    /**
     * 获取未配置的属性参数
     *
     * @param param { "goods_id": "商品id", "attrIds": "已存在的属性id"}
     * @return 结果
     */
    public List<SprdGoodsAttr> findAttrsWithoutConfig(Map<String, Object> param);

    /**
     * 根据 类型id 查询 属性列表
     *
     * @param typeId
     * @return
     */
    public List<SprdGoodsAttr> selectTypeAttrListByTypeId(@Param("typeId") Long typeId);

}
